/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package productos.beans;

import entities.Producto;
import facades.ProductoFacade;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import java.io.Serializable;
import java.util.List;
import javax.enterprise.event.Event;
import javax.inject.Inject;
import datamodel.FiltradoDataModel;
import productos.datamodel.ProductosFiltradosDataModel;
import productos.qualifiers.EventoFiltrarProducto;
import productos.qualifiers.EventoProductosYaFiltrados;
import sql.FiltradoProductosSQLGenerator;

/**
 *
 * @author damfercer
 */
@Named(value = "filtradoProductoBean")
@SessionScoped
public class FiltradoProductoBean implements Serializable {
    private ProductosFiltradosDataModel productosFiltrados;
    @Inject
    @EventoFiltrarProducto
    Event<FiltradoDataModel> eventoFiltrarProducto;
    private FiltradoDataModel filtradoDataModel;
    private FiltradoProductosSQLGenerator filtradoSQLGenerator;
    @Inject
    private ProductoFacade productoFacade;
    @Inject
    @EventoProductosYaFiltrados
    Event<ProductosFiltradosDataModel> eventoProductosFiltrados;
    /**
     * Creates a new instance of FiltradoProductoBean
     */
    public FiltradoProductoBean() {
        productosFiltrados=new ProductosFiltradosDataModel();
        filtradoDataModel=new FiltradoDataModel();
        filtradoSQLGenerator=new FiltradoProductosSQLGenerator();
    }

    /**
     * @return the productosFiltrados
     */
    public ProductosFiltradosDataModel getProductosFiltrados() {
        return productosFiltrados;
    }

    /**
     * @param productosFiltrados the productosFiltrados to set
     */
    public void setProductosFiltrados(ProductosFiltradosDataModel productosFiltrados) {
        this.productosFiltrados = productosFiltrados;
    }
    
    public void filtrar(){
        eventoFiltrarProducto.fire(filtradoDataModel);
        String sql=filtradoSQLGenerator.generateSQL();
        List<Producto> productos=productoFacade.filtrarProductos(sql);
        productosFiltrados.setProductosFiltrados(productos);
        eventoProductosFiltrados.fire(productosFiltrados);
    }
    /**
     * @return the filtradoDataModel
     */
    public FiltradoDataModel getFiltradoDataModel() {
        return filtradoDataModel;
    }

    /**
     * @param filtradoDataModel the filtradoDataModel to set
     */
    public void setFiltradoDataModel(FiltradoDataModel filtradoDataModel) {
        this.filtradoDataModel = filtradoDataModel;
    }
}
